package base.template;

import java.util.Iterator;
import java.util.Random;

import base.template.coffee.Breve;
import base.template.coffee.Cappuccino;
import base.template.coffee.Coffee;
import base.template.coffee.Latte;
import base.template.coffee.Mocha;

public class CoffeeGenerator implements Generator<Coffee>,Iterable<Coffee>{
	
	@SuppressWarnings("rawtypes")
	private Class[] types={Latte.class,Mocha.class,Cappuccino.class,Breve.class};
	private static Random rand=new Random();
	public CoffeeGenerator(){}
	private int size=0;
	
	public CoffeeGenerator(int size){
		this.size=size;
	}
	
	public Coffee next() {
		try{
			return (Coffee) types[rand.nextInt(types.length)].newInstance();
		}catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	class CoffeeIterator implements Iterator<Coffee>{
		int count=size;
		public boolean hasNext() {
			return count>0;
		}
		public Coffee next() {
			count--;
			return CoffeeGenerator.this.next();
		}
		public void remove() {
			
		}
	}

	public Iterator<Coffee> iterator() {
		return new CoffeeIterator();
	}
	public static void main(String[] args) {
//		for(int i=0;i<5;i++){
//			Latte coffee=new Latte();
//			System.out.println(coffee);
//		}
//		CoffeeGenerator gen=new CoffeeGenerator();
//		for(int i=0;i<5;i++){
//			System.out.println(gen.next());
//		}
		for(Coffee c:new CoffeeGenerator(5)){
			System.out.println(c);
		}
	}
}










